From: Florian Müllner Date: Fri, 4 Dec 2020 19:40:13 +0000 (+0100) Subject: dbusServices/screensaver: Split out public ScreenSaver service X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~616^2^2~694 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=af5aff32514d7236d3261670a5ed0c087ee3abdd;p=gnome-shell.git dbusServices/screensaver: Split out public ScreenSaver service Commit 799bbdb50 split out the public Fdo notification service, so that any app with permission to talk to org.freedesktop.Notifications will in fact be limited to that service. To a somewhat lesser extent this applies to the org.gnome.ScreenSaver service as well, which some applications still use instead of the Inhibit portal. https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3452 Part-of: --- diff --git a/js/dbusServices/meson.build b/js/dbusServices/meson.build index 2f047bb52..68e8bd12d 100644 --- a/js/dbusServices/meson.build +++ b/js/dbusServices/meson.build @@ -6,6 +6,7 @@ launcherconf.set('libdir', libdir) dbus_services = { 'org.gnome.Shell.Extensions': 'extensions', 'org.gnome.Shell.Notifications': 'notifications', + 'org.gnome.ScreenSaver': 'screensaver', } if enable_recorder diff --git a/js/dbusServices/org.gnome.ScreenSaver.src.gresource.xml b/js/dbusServices/org.gnome.ScreenSaver.src.gresource.xml new file mode 100644 index 000000000..834167b95 --- /dev/null +++ b/js/dbusServices/org.gnome.ScreenSaver.src.gresource.xml @@ -0,0 +1,11 @@ + + + + main.js + screenSaverService.js + dbusService.js + + misc/config.js + misc/fileUtils.js + + diff --git a/js/dbusServices/screensaver/main.js b/js/dbusServices/screensaver/main.js new file mode 100644 index 000000000..2a08d1403 --- /dev/null +++ b/js/dbusServices/screensaver/main.js @@ -0,0 +1,11 @@ +/* exported main */ + +const { DBusService } = imports.dbusService; +const { ScreenSaverService } = imports.screenSaverService; + +function main() { + const service = new DBusService( + 'org.gnome.ScreenSaver', + new ScreenSaverService()); + service.run(); +} diff --git a/js/dbusServices/screensaver/screenSaverService.js b/js/dbusServices/screensaver/screenSaverService.js new file mode 100644 index 000000000..571e64e50 --- /dev/null +++ b/js/dbusServices/screensaver/screenSaverService.js @@ -0,0 +1,68 @@ +// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- +/* exported ScreenSaverService */ + +const { Gio, GLib } = imports.gi; + +const { loadInterfaceXML } = imports.misc.fileUtils; +const { ServiceImplementation } = imports.dbusService; + +const ScreenSaverIface = loadInterfaceXML('org.gnome.ScreenSaver'); +const ScreenSaverProxy = Gio.DBusProxy.makeProxyWrapper(ScreenSaverIface); + +var ScreenSaverService = class extends ServiceImplementation { + constructor() { + super(ScreenSaverIface, '/org/gnome/ScreenSaver'); + + this._proxy = new ScreenSaverProxy(Gio.DBus.session, + 'org.gnome.Shell.ScreenShield', + '/org/gnome/ScreenSaver', + (proxy, error) => { + if (error) + log(error.message); + }); + + this._proxy.connectSignal('ActiveChanged', + (proxy, sender, params) => { + this._dbusImpl.emit_signal('ActiveChanged', + new GLib.Variant('(b)', params)); + }); + this._proxy.connectSignal('WakeUpScreen', + () => this._dbusImpl.emit_signal('WakeUpScreen', null)); + } + + LockAsync(params, invocation) { + this._proxy.LockRemote(...params, (res, error) => { + if (this._handleError(invocation, error)) + return; + + invocation.return_value(null); + }); + } + + GetActiveAsync(params, invocation) { + this._proxy.GetActiveRemote(...params, (res, error) => { + if (this._handleError(invocation, error)) + return; + + invocation.return_value(new GLib.Variant('(b)', res)); + }); + } + + SetActiveAsync(params, invocation) { + this._proxy.SetActiveRemote(...params, (res, error) => { + if (this._handleError(invocation, error)) + return; + + invocation.return_value(null); + }); + } + + GetActiveTimeAsync(params, invocation) { + this._proxy.GetActiveTimeRemote(...params, (res, error) => { + if (this._handleError(invocation, error)) + return; + + invocation.return_value(new GLib.Variant('(u)', res)); + }); + } +}; diff --git a/js/ui/shellDBus.js b/js/ui/shellDBus.js index f7b542b29..181bd1631 100644 --- a/js/ui/shellDBus.js +++ b/js/ui/shellDBus.js @@ -367,7 +367,8 @@ var ScreenSaverDBus = class { this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(ScreenSaverIface, this); this._dbusImpl.export(Gio.DBus.session, '/org/gnome/ScreenSaver'); - Gio.DBus.session.own_name('org.gnome.ScreenSaver', Gio.BusNameOwnerFlags.REPLACE, null, null); + Gio.DBus.session.own_name('org.gnome.Shell.ScreenShield', + Gio.BusNameOwnerFlags.NONE, null, null); } LockAsync(parameters, invocation) {